A typical modern computer system includes a microprocessor, memory, and peripheral computer resources, i.e., monitor, keyboard, software programs, etc. The microprocessor has, among other components, arithmetic, logic, and control circuitry that interpret and execute instructions from a computer program. FIG. 1 shows a prior art diagram of an example of a computer's microprocessor (20) that has a central processing unit (“CPU” and also known as “execution unit”) (22), a memory controller (24) (also known as a “load/store unit”), and on-board cache memory (26). The microprocessor (20) is connected to external cache memory (28), and the microprocessor (20) is also connected to the main memory (30) of the computer system. Cache memory is a region of fast memory that holds copies of data.
One goal of the computer system is to execute instructions provided by the computer's users and software programs. The execution of instructions is carried out by the CPU (22). Data needed by the CPU (22) to carry out an instruction are fetched by the memory controller (24) and loaded into the internal registers (32) of the CPU (22). Upon command from the CPU (22), the CPU (22) searches for the requested data in the internal registers (32). If the requested data is not available in the internal registers (32), the memory controller (24) searches for requested data first in the on-board cache memory (26), then in the external cache memory (28). If those searches turn out unsuccessful, then the memory controller (24) retrieves the data from the main memory (30).
Register files and the main memory are generally arranged in one or more memory arrays. FIG. 2 shows a portion of a typical memory array in which memory cells (40) are arranged in rows (44) and columns (46) such that data in each memory cell can be accessed by the selection of one or more bit lines (42) that are used to read data from the memory array or write data to the memory array.
The process of production testing of arrays (e.g., memory arrays) is generally performed by test engineers. Test vector patterns are generated to test cells within an array. The goal of a test engineer is to create test vector patterns to provide as much coverage as possible by physically accessing cells to validate the memory cell is functioning properly. Referring to FIG. 3, the process of creating test vectors starts when the test engineer receives a design document of an array from a designer of the array (Step 50). The design document is a written description depicting the array including the size of the array, a bitmap program (actual physical memory cell locations and data), etc. Next, the test engineer uses the design document to create a bitmap program (i.e., translation of virtual address to a physical memory location) of the array (Step 52) in a form that a test vector pattern generator can recognize. During the testing process, many types of test vector patterns are generated to uncover various bugs in the design of the cells. The test engineer defines a plurality of test vector patterns (6n, 12n, walking 1's, etc.) to uncover the various bugs in the design (Step 54).
Once the test vector patterns are defined, source code is written to generate the desired test vector patterns (Step 56). The test pattern vector generated from the source code is raw data made up of a plurality of zeros and ones. Depending on the type of tester machine being used, the raw data is formatted to fit that particular tester machine (Step 58). The formatted raw data is then fed into the tester machine where the tester machine has physical interface with the silicon chip (Step 60). The resulting output of the tester machine is compared to a set of expected results to determine if the array is functioning properly (Step 62). This process is re-created and performed for each test vector pattern needed to test a particular array.